package myReflect2;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Parameter;

public class MyReflectDemo2 {
    public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, NoSuchFieldException, IllegalAccessException {
        //1 获取class字节码对象
        Class<?> clazz = Class.forName("myReflect2.Student");

        //2 获取构造方法

        /*Constructor[] cons = clazz.getConstructors();
        for (Constructor con : cons) {
            System.out.println(con);
        }*/

        /*Constructor<?>[] cons2 = clazz.getDeclaredConstructors();
        for (Constructor<?> con : cons2) {
            System.out.println(con);
        }*/

        /*Constructor<?> cons3 = clazz.getDeclaredConstructor(String.class);
        System.out.println(cons3);*/

        /*Constructor<?> cons4 = clazz.getDeclaredConstructor(int.class);
        System.out.println(cons4);*/


        /*//获取权限修饰符
        int modifiers = cons5.getModifiers();
        System.out.println(modifiers);  //打印结果是2  表示是private修饰

        //获取参数
        Parameter[] parameters = cons5.getParameters();
        for (Parameter parameter : parameters) {
            System.out.println(parameter);
        }*/

        Field[] fields = clazz.getDeclaredFields();
        Field name = clazz.getDeclaredField("name");
        //获取成员变量记录的值
        Student s = new Student("小妮子",18);
        name.setAccessible(true);  //name的构造方法是私有的  需要暴力反射  直接获取使用权
        String value = (String) name.get(s);
        System.out.println(value);

        name.set(s,"小八");
        System.out.println(s);
    }
}
